home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok32.lha
/
TestBild
/
txt
/
Muster.mod
< prev
next >
Wrap
Text File
|
1993-08-15
|
12KB
|
385 lines
(*--------------------------------------------------------------------------
:Program. Muster.mod
:Author. Andreas Lüdtke
:Address. Stangestraße 11, D 2000 Hamburg 50
:Phone. 040/3905153
:History. V1.0, 01-Jan-90, Andreas Lüdtke
:Copyright. PD © Andreas Lüdtke 1990.
:Language. Modula-2
:Translator. M2Amiga 3.3d
:Contents. Implementationsmodul mit Prozeduren zum Erzeugen
:Contents. der Muster des Testbildprogramms
---------------------------------------------------------------------------*)
IMPLEMENTATION MODULE Muster;
FROM SYSTEM IMPORT ADR, FFP;
FROM Graphics IMPORT SetAPen, Draw, Move, WritePixel, RectFill,
RastPortPtr, ViewPortPtr, SetRGB4, SetRast, DrawEllipse, Text;
FROM GfxMacros IMPORT SetDrPt;
CONST
BaseColor = 2; (* geht bis BaseColor + 8 *)
LineColor = 1;
BackColor = 0;
TBColor = 11; (* Mittelgrau *)
G1Color = 12;
G2Color = 13;
GREY = TRUE;
COLOR = FALSE;
CFAKT1 = 1.838; (* Korrekturfaktoren für Kreise *)
CFAKT2 = CFAKT1 / 2.0;
PROCEDURE ChangeColors( vpptr : ViewPortPtr;
GRAU : BOOLEAN);
VAR
loop : CARDINAL;
BEGIN
IF GRAU THEN
SetRGB4( vpptr, BaseColor + 7, 0, 0, 0); (* schwarz *)
SetRGB4( vpptr, BaseColor + 6, 3, 3, 3); (* grau *)
SetRGB4( vpptr, BaseColor + 5, 5, 5, 5); (* " *)
SetRGB4( vpptr, BaseColor + 4, 7, 7, 7); (* " *)
SetRGB4( vpptr, BaseColor + 3, 9, 9, 9); (* " *)
SetRGB4( vpptr, BaseColor + 2, 11, 11, 11); (* " *)
SetRGB4( vpptr, BaseColor + 1, 13, 13, 13); (* " *)
SetRGB4( vpptr, BaseColor + 0, 15, 15, 15); (* weiß *)
ELSE
SetRGB4( vpptr, BaseColor + 7, 0, 0, 0); (* schwarz *)
SetRGB4( vpptr, BaseColor + 6, 0, 0, 15); (* blau *)
SetRGB4( vpptr, BaseColor + 5, 15, 0, 0); (* rot *)
SetRGB4( vpptr, BaseColor + 4, 15, 0, 15); (* lila *)
SetRGB4( vpptr, BaseColor + 3, 0, 15, 0); (* grün *)
SetRGB4( vpptr, BaseColor + 2, 4, 15, 15); (* hellblau *)
SetRGB4( vpptr, BaseColor + 1, 15, 15, 0); (* gelb *)
SetRGB4( vpptr, BaseColor + 0, 15, 15, 11); (* beige *)
END;
END ChangeColors;
PROCEDURE InvertLineColors( vpptr : ViewPortPtr;
invert : BOOLEAN);
BEGIN
IF invert THEN
SetRGB4( vpptr, LineColor, 0, 0, 0); (* schwarz *)
SetRGB4( vpptr, BackColor, 15, 15, 15); (* weiss *)
ELSE
SetRGB4( vpptr, LineColor, 15, 15, 15); (* weiss *)
SetRGB4( vpptr, BackColor, 0, 0, 0); (* schwarz *)
END;
END InvertLineColors;
PROCEDURE DrawLines( rp : RastPortPtr;
xstep : CARDINAL;
ystep : CARDINAL);
VAR
loop : CARDINAL;
ymax : CARDINAL;
BEGIN
ymax := rp^.bitMap^.rows - 1;
SetAPen( rp, LineColor);
SetRast( rp, BackColor);
loop := xstep;
WHILE loop < 640 DO
Move( rp, loop, 0);
Draw( rp, loop, ymax);
INC(loop,xstep);
END;
loop := ystep;
WHILE loop <= ymax DO
Move( rp, 0, loop);
Draw( rp, 639, loop);
INC(loop,ystep);
END;
END DrawLines;
PROCEDURE DrawPixel( rp : RastPortPtr;
xstep : CARDINAL;
ystep : CARDINAL);
VAR
xloop : CARDINAL;
yloop : CARDINAL;
ymax : CARDINAL;
BEGIN
ymax := rp^.bitMap^.rows - 1;
SetAPen( rp, LineColor);
SetRast( rp, BackColor);
yloop := 0;
WHILE yloop <= ymax DO
IF xstep <= 16 THEN
CASE xstep OF
| 2 : SetDrPt( rp, 0AAAAH);
| 4 : SetDrPt( rp, 08888H);
| 8 : SetDrPt( rp, 08080H);
| 16: SetDrPt( rp, 08000H);
END;
Move( rp, 0, yloop);
Draw( rp, 639, yloop);
ELSE
xloop := 0;
WHILE xloop < 640 DO
IF WritePixel( rp, xloop, yloop) THEN END;
INC(xloop,xstep);
END;
END;
IF (ystep>8) AND WritePixel( rp, 639, yloop) THEN END;
INC(yloop,ystep);
END;
xloop := 0;
WHILE xloop < 640 DO (* für die unterste Zeile *)
IF WritePixel( rp, xloop, ymax) THEN END;
INC(xloop,xstep);
END;
IF (ystep>8) AND WritePixel( rp, 639, ymax) THEN END;
SetDrPt( rp, 0FFFFH);
END DrawPixel;
PROCEDURE DrawSquares( rp : RastPortPtr;
xstep : CARDINAL;
ystep : CARDINAL);
VAR
xloop : CARDINAL;
yloop : CARDINAL;
ymax : CARDINAL;
Pt1 : CARDINAL;
Pt2 : CARDINAL;
BEGIN
ymax := rp^.bitMap^.rows - 1;
SetAPen( rp, LineColor);
SetRast( rp, BackColor);
yloop := 0;
WHILE yloop < ymax DO
IF xstep <= 8 THEN
CASE xstep OF
| 2 : Pt1 := 0CCCCH; Pt2 := 03333H;
| 4 : Pt1 := 0F0F0H; Pt2 := 00F0FH;
| 8 : Pt1 := 0FF00H; Pt2 := 000FFH;
END;
xloop := 0;
SetDrPt( rp, Pt1);
WHILE xloop < ystep DO
Move( rp, 0, yloop+xloop);
Draw( rp, 639, yloop+xloop);
INC(xloop);
END;
xloop := ystep;
SetDrPt( rp, Pt2);
WHILE xloop < 2*ystep DO
Move( rp, 0, yloop+xloop);
Draw( rp, 639, yloop+xloop);
INC(xloop);
END;
ELSE
xloop := 0;
WHILE xloop <= 640 DO
RectFill(rp,xloop,yloop,xloop+xstep-1,yloop+ystep-1);
RectFill(rp,xloop+xstep,yloop+ystep,xloop+2*xstep-1,yloop+2*ystep-1);
INC(xloop,2*xstep);
END;
END;
INC(yloop,2*ystep);
END;
SetDrPt( rp, 0FFFFH);
END DrawSquares;
PROCEDURE DrawSteps( rp : RastPortPtr);
VAR
loop : CARDINAL;
ymax : CARDINAL;
BEGIN
ymax := rp^.bitMap^.rows - 1;
FOR loop := 0 TO 7 DO
SetAPen( rp, BaseColor + loop);
RectFill( rp, loop*80, 0, (loop*80) + 79, ymax);
END;
END DrawSteps;
PROCEDURE DrawRects( rp : RastPortPtr;
xstep : CARDINAL;
ystep : CARDINAL);
VAR
count : CARDINAL;
xloop : CARDINAL;
yloop : CARDINAL;
ymax : CARDINAL;
BEGIN
ymax := rp^.bitMap^.rows - 1;
SetAPen( rp, LineColor);
SetRast( rp, BackColor);
count := 1;
yloop := (ymax DIV 2) +ystep;
xloop := 320 + xstep;
WHILE (yloop < ymax) AND (xloop < 640) DO
Move( rp, xloop, yloop);
Draw( rp, xloop-2*count*xstep, yloop);
Draw( rp, xloop-2*count*xstep, yloop-2*count*ystep);
Draw( rp, xloop, yloop-2*count*ystep);
Draw( rp, xloop, yloop);
INC(count);
INC(xloop,xstep);
INC(yloop,ystep);
END;
END DrawRects;
PROCEDURE DrawCircles( rp : RastPortPtr;
xstep : CARDINAL);
VAR
xloop : CARDINAL;
BEGIN
xloop := xstep;
SetAPen( rp, LineColor);
SetRast( rp, BackColor);
IF WritePixel( rp, 320, rp^.bitMap^.rows DIV 2) THEN END;
IF rp^.bitMap^.rows > 256 THEN
WHILE xloop < 256 DO
DrawEllipse( rp, 320, 256, CARDINAL(CFAKT2*FFP(xloop)), xloop);
INC(xloop,xstep);
END;
ELSE
WHILE xloop < 128 DO
DrawEllipse( rp, 320, 128, CARDINAL(CFAKT1*FFP(xloop)), xloop);
INC(xloop,xstep);
END;
END;
END DrawCircles;
PROCEDURE DrawPicture( rp : RastPortPtr);
CONST
rab = 432; (* Breite Rechteck *)
xra = (640-rab) DIV 2; (* X-Offset Rechteck *)
ftb = rab DIV 8; (* Breite einer Farbtreppe *)
gtb = rab DIV 4; (* Breite einer Grautreppe *)
xstep = 32; (* Hintergrundrasterbreite *)
VAR
loop : CARDINAL; (* Schleifenvariable *)
ymax : CARDINAL; (* maximale Bildschirmhoehe-1 *)
rah : CARDINAL; (* Höhe Rechteck *)
yra : CARDINAL; (* Y-Offset Rechteck *)
fth : CARDINAL; (* Höhe Farbtreppe *)
gth : CARDINAL; (* Höhe Grautreppe *)
gto : CARDINAL; (* Offset Grautreppe *)
mto : CARDINAL; (* Mittenoffset *)
mth : CARDINAL; (* Höhe Mittentreppe *)
lth : CARDINAL; (* Höhe Rasterstriche *)
lto : CARDINAL; (* Rasteroffset *)
wth : CARDINAL; (* Höhe Weißetreppe *)
wto : CARDINAL; (* Rasteroffset *)
cto : CARDINAL; (* Farbbalkenoffset *)
ystep : CARDINAL; (* Hintergrundrasterhöhe *)
BEGIN
ymax := rp^.bitMap^.rows;
rah := 214; fth := 64;
gth := 35; mth := 20;
lth := 27; wth := 10;
ystep := 16;
IF rp^.bitMap^.rows > 256 THEN
rah := 2*rah; fth := 2*fth;
gth := 2*gth; mth := 2*mth;
lth := 2*lth; wth := 2*wth;
ystep := 2*ystep;
END;
yra := (ymax-rah) DIV 2;
gto := yra+fth;
mto := gto+gth;
lto := mto+mth;
wto := lto+lth;
cto := wto+wth;
(* Hier wird das Hintergrundraster gezeichnet *)
SetAPen( rp, LineColor);
SetRast( rp, TBColor);
loop := xstep;
WHILE loop < 640 DO
Move( rp, loop, 0);
Draw( rp, loop, ymax);
INC(loop,xstep);
END;
loop := ystep;
WHILE loop <= ymax DO
Move( rp, 0, loop);
Draw( rp, 639, loop);
INC(loop,ystep);
END;
(* Hier wird die Farbtreppe gezeichnet *)
RectFill( rp, xra, yra, xra+rab-1, yra+rah);
FOR loop := 0 TO 7 DO
SetAPen( rp, BaseColor + loop);
RectFill( rp, xra+loop*ftb, yra, xra+ftb-1+(loop*ftb), yra+fth-1);
END;
(* Jetzt kommt die Grautreppe *)
SetAPen( rp, BackColor);
RectFill( rp, xra+0*gtb, gto, xra+gtb-1+(0*gtb), gto+gth-1);
SetAPen( rp, G1Color);
RectFill( rp, xra+1*gtb, gto, xra+gtb-1+(1*gtb), gto+gth-1);
SetAPen( rp, G2Color);
RectFill( rp, xra+2*gtb, gto, xra+gtb-1+(2*gtb), gto+gth-1);
(* und hier der 2 Pixel breite weiße Strich *)
SetAPen( rp, LineColor);
Move( rp, 319, gto);
Draw( rp, 319, gto+gth-1);
Move( rp, 320, gto);
Draw( rp, 320, gto+gth-1);
(* und nun der schwarze Balken in der Mitte *)
SetAPen( rp, BackColor);
RectFill( rp, xra+77, mto, 639-xra-77, mto+mth-1);
(* und jetzt die schwarzen Strichmuster *)
loop := xra+16;
WHILE loop < xra+gtb DO
Move( rp, loop, lto);
Draw( rp, loop, lto+lth-1);
INC( loop, 16);
END;
loop := xra+gtb+8;
WHILE loop < xra+2*gtb DO
Move( rp, loop, lto);
Draw( rp, loop, lto+lth-1);
INC( loop, 8);
END;
loop := xra+2*gtb+4;
WHILE loop < xra+3*gtb DO
Move( rp, loop, lto);
Draw( rp, loop, lto+lth-1);
INC( loop, 4);
END;
loop := xra+3*gtb+2;
WHILE loop < xra+4*gtb DO
Move( rp, loop, lto);
Draw( rp, loop, lto+lth-1);
INC( loop, 2);
END;
(* und hier der 2 Pixel breite schwarze Strich *)
Move( rp, 319, wto);
Draw( rp, 319, wto+wth-1);
Move( rp, 320, wto);
Draw( rp, 320, wto+wth-1);
(* und nun noch die bunten Balken *)
SetAPen( rp, BaseColor+5);
RectFill( rp, xra, cto, xra+rab-150, cto-1+(yra+rah-cto) DIV 2);
SetAPen( rp, BaseColor+3);
RectFill( rp, xra, cto+(yra+rah-cto) DIV 2, xra+rab-150, yra+rah);
SetAPen( rp, BaseColor+6);
RectFill( rp, xra+rab-150, cto, 639-xra, yra+rah);
(* zum Schluss noch den Kreis und den Text *)
SetAPen( rp, LineColor);
IF ymax > 256 THEN
DrawEllipse( rp, 320, (ymax+1) DIV 2, CARDINAL(CFAKT2*FFP((ymax-1) DIV 2)),
(ymax-1) DIV 2);
ELSE
DrawEllipse( rp, 320, (ymax+1) DIV 2, CARDINAL(CFAKT1*FFP((ymax-1) DIV 2)),
(ymax-1) DIV 2);
END;
Move( rp, xra+125, mto+(mth DIV 2)+2);
Text( rp, ADR("AMIGA Testbildgenerator"), 23);
END DrawPicture;
END Muster.